SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paAgregarTramite] 

@Proceso INT,
@Descripcion VARCHAR(255),
@OrganizacionSolicitante INT = NULL,
@AgenteSolicitante INT = NULL,
@AlumnoSolicitante INT = NULL,
@DescripcionSolicitante VARCHAR(100) = NULL,
@ResponsableProceso INT,
@Asunto INT = NULL,
@Tipo INT = NULL,
@Numero INT, 
@IdTramite INT OUTPUT

AS
SET NOCOUNT ON
DECLARE @Error INT
DECLARE @Solicito INT
DECLARE @Tarea INT
DECLARE @TareaPosterior INT
DECLARE @Paso INT
DECLARE @IdTracking INT
DECLARE @Reparticion INT
DECLARE @AsuntoProceso INT
DECLARE @TipoProceso INT
SET @Error = 0

BEGIN TRANSACTION

-- Obtengo el usuario actual
SELECT @Solicito = IdUsuario, @Reparticion = IdReparticion FROM tb_Usuarios WHERE NTUser = SYSTEM_USER

-- Si es necesario obtengo la organizacion
IF @OrganizacionSolicitante IS NOT NULL SELECT @OrganizacionSolicitante = IdOrganizaciones FROM tb_Organizaciones WHERE CUISE = @OrganizacionSolicitante

-- Si es necesario obtengo el agente
IF @AgenteSolicitante IS NOT NULL SELECT @AgenteSolicitante = IdAgente FROM tb_Agentes WHERE Documento = @AgenteSolicitante 

-- Obtengo la tarea de inicio y su paso
SELECT @Tarea = IdTarea, @TareaPosterior = Posterior, @Paso = IdPaso FROM tb_Tareas T INNER JOIN tb_Pasos P ON T.IdTarea = P.Tarea WHERE T.Proceso = @Proceso AND T.Tipo = 1

-- Obtengo el asunto y el tipo del proceso
IF @Asunto IS NULL AND @Tipo IS NULL BEGIN
	SELECT @AsuntoProceso = Asunto, @TipoProceso = Tipo FROM tb_Procesos WHERE IdProceso = @Proceso
END
ELSE BEGIN
	SELECT @AsuntoProceso = @Asunto, @TipoProceso = @Tipo
END

-- Inserto el registro de tramite
INSERT INTO tb_TramitesDocumentos (Proceso, NroDeSubtramites, Descripcion,Solicito, OrganizacionSolicitante, AgenteSolicitante, AlumnoSolicitante, DescripcionSolicitante,
		ResponsableProceso, FechaYHoraInicio, FechaYHoraFin, TiempoTraslados, TiempoLatencia, Estado, TramiteOrigen, Asunto, Tipo, Numero)
	VALUES(@Proceso, 0, @Descripcion, @Solicito, @OrganizacionSolicitante, @AgenteSolicitante, @AlumnoSolicitante, @DescripcionSolicitante,
		@ResponsableProceso, GETDATE(), NULL, 0, 0, 2, NULL, @AsuntoProceso, @TipoProceso, @Numero)

SELECT @Error = @@ERROR, @IdTramite = @@IDENTITY

IF @Error <> 0 GOTO Salir

-- Inserto el registro de tracking para el inicio del tramite
INSERT INTO tb_Tracking (Tramite, NroSubtramite, Tarea, Desde, FechaRecepcion, FechaActivacion, Hasta, ReparticionDestino, Responsable, Estado)
	VALUES (@IdTramite, 0, @Tarea, GETDATE(), NULL, NULL, GETDATE(), @Reparticion, @Solicito, 7)

SELECT @Error = @@ERROR, @IdTracking = @@IDENTITY

IF @Error <> 0 GOTO Salir

-- Inserto el registro de tracking de pasos para el inicio de tramite
INSERT INTO tb_TrackingDePasos (Tracking, Paso, VistoBueno, Observacion, Documento, Decision)
	VALUES(@IdTracking, @Paso, 'S', NULL, NULL, NULL)

SELECT @Error = @@ERROR

IF @Error <> 0 GOTO Salir

-- Inserto el registro de la siguiente tarea a ejecutar
INSERT INTO tb_Tracking (Tramite, NroSubtramite, Tarea, Desde, FechaRecepcion, FechaActivacion, Hasta, ReparticionDestino, Responsable, Estado)
	VALUES (@IdTramite, 0, @TareaPosterior, GETDATE(), NULL, NULL, NULL, @Reparticion, @Solicito, 4)

SELECT @Error = @@ERROR

IF @Error <> 0 GOTO Salir

Salir:

IF @Error = 0
	COMMIT TRANSACTION
ELSE
	ROLLBACK TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[paAgregarTramite] TO [GestionDeDocumentos]
GO
